﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Data.Sql;
using System.Data.SqlClient;
using Projeto.Utilidades;

namespace Projeto.Classes.Conexao
{
    public class Produto
    {
        //propriedades
        private SqlDataAdapter adapter;
        //private SqlDataReader reader;
        public DataTable dataTable;
        public Exception error;
        private baseConnection connection;
        private int rowsAffected = 0;

        //metodos
        public bool InsertProduto(Objeto.Produto value) 
        {
            try 
            {
                //iniciando conexão
                connection = new baseConnection();
                connection.begin(constants.INS_PRODUTO);
                //configurando os parametros para o command
                connection.addParameterToCommand(constants.PARAM_DESCRICAO, value.ds_produto);
                //abrindo a conexão
                connection.openConnection();
                //executa o insert, e retorna o numero de linhas afetadas, indicando se inseriu ou não
                connection.command.ExecuteNonQuery();
                rowsAffected = 1;
            }
            catch (Exception ex) 
            {
                error = new Exception();
                error = ex;
                rowsAffected = 0;
            }
            finally 
            {
                //se a conexão estiver com status diferente de "Fechada"
                if (!connection.IsClose()) 
                {
                    //fecha a conexão
                    connection.closeConnection();
                }
            }

            connection = null;

            if (rowsAffected > 0)
            {
                return true;
            }
            else 
            {
                return false;
            }
        }

        public bool UpdateProduto(Objeto.Produto value) 
        {
            try 
            {
                //iniciando a conexão
                connection = new baseConnection();
                connection.begin(constants.UPD_PRODUTO);
                //parametros para o command
                connection.addParameterToCommand(constants.PARAM_ID, value.id_produto);
                connection.addParameterToCommand(constants.PARAM_DESCRICAO, value.ds_produto);
                //abrir a conexão
                connection.openConnection();
                //executar a operação de update
                connection.command.ExecuteNonQuery();
                rowsAffected = 1;
            }
            catch (Exception ex) 
            {
                error = new Exception();
                error = ex;
                rowsAffected = 0;
            }
            finally 
            {
                if (!connection.IsClose()) 
                {
                    //uma vez a operação sendo executada a conexão é fechada
                    connection.closeConnection();    
                }
            }

            connection = null;

            if (rowsAffected == 1)
            {
                return true;
            }
            else 
            {
                return false;
            }
            
        }

        public bool DeleteProduto(Objeto.Produto value) 
        {
            try
            {
                //iniciando a conexão
                connection = new baseConnection();
                connection.begin(constants.DEL_PRODUTO);
                //parametros para o command
                connection.addParameterToCommand(constants.PARAM_ID, value.id_produto);
                //abrir a conexão
                connection.openConnection();
                //executar a operação de delete
                connection.command.ExecuteNonQuery();
                rowsAffected = 1;
            }
            catch (Exception ex)
            {
                error = new Exception();
                error = ex;
                rowsAffected = 0;
            }
            finally
            {
                if (!connection.IsClose())
                {
                    //uma vez a operação sendo executada a conexão é fechada
                    connection.closeConnection();
                }
            }

            connection = null;

            if (rowsAffected == 1)
            {
                return true;
            }
            else
            {
                return false;
            }
        }

        public bool SelectProduto() 
        {
            try
            {
                //iniciando a conexão
                connection = new baseConnection();
                connection.begin(constants.SEL_PRODUTO);
                //parametros para o command
                //abrir a conexão
                connection.openConnection();
                //executar a operação de select
                dataTable = new DataTable();
                adapter = new SqlDataAdapter(connection.command);
                adapter.Fill(dataTable);
                rowsAffected = 1;
            }
            catch (Exception ex)
            {
                error = new Exception();
                error = ex;
                rowsAffected = 0;
            }
            finally
            {
                if (!connection.IsClose())
                {
                    //uma vez a operação sendo executada a conexão é fechada
                    connection.closeConnection();
                }
            }

            connection = null;

            if (rowsAffected == 1)
            {
                return true;
            }
            else
            {
                return false;
            }
        }
    }
}
